package com.qfedu.service.impl;

import com.qfedu.dao.CartDao;
import com.qfedu.dao.OrderDao;
import com.qfedu.dao.OrderDetailDao;
import com.qfedu.dao.impl.CartDaoImpl;
import com.qfedu.dao.impl.OrderDaoImpl;
import com.qfedu.dao.impl.OrderDetailDaoImpl;
import com.qfedu.pojo.Cart;
import com.qfedu.pojo.Order;
import com.qfedu.pojo.OrderDetail;
import com.qfedu.service.OrderService;
import com.qfedu.utils.TxUtils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Random;

/**
 * 创建者: QF-SUN
 * 创建时间: 2023/4/6 14:23
 * 描述:
 */
public class OrderServiceImpl implements OrderService {

    OrderDao orderDao = new OrderDaoImpl();

    CartDao cartDao = new CartDaoImpl();

    OrderDetailDao orderDetailDao  = new OrderDetailDaoImpl();


    /**
     * 1. 把该用户的购物车信息都查询出来， 计算购物车商品的总价
     * 2. 新增order对象
     * 3. 新增orderDetail对象，一个购物车对应一个订单详情
     * 4. 清空购物车
     * @param uId
     * @param addrId
     * @return
     */
    @Override
    public Order addOrder(int uId, int addrId) {
        try {
            TxUtils.begin();
            //把该用户的购物车信息都查询出来， 计算购物车商品的总价
            List<Cart> cartList = cartDao.findCartByUId(uId);
            double sum = 0;
            if(cartList != null  && cartList.size() > 0){
                for (Cart cart : cartList) {
                    sum += cart.getMoney();
                }
            }

            //新增order对象
            Order order = new Order();
            order.setAid(addrId);
            order.setMoney(sum);
            order.setUid(uId);
            order.setTime(new Date());
            order.setStatus("未支付");
            //订单id： 日期字符串 + 4位的随机整数
            String orderId = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()) + (new Random().nextInt(9000) + 1000);
            order.setId(orderId);


            orderDao.insert(order);

            //新增orderDetail对象，一个购物车对应一个订单详情
            if(cartList != null  && cartList.size() > 0){
                for (Cart cart : cartList) {
                    OrderDetail orderDetail = new OrderDetail();
                    orderDetail.setMoney(cart.getMoney());
                    orderDetail.setNum(cart.getNum());
                    orderDetail.setPid(cart.getPid());
                    orderDetail.setOid(orderId); //订单编号

                    orderDetailDao.insert(orderDetail);
                }
            }


            //清空购物车
            cartDao.clearCart(uId);


            TxUtils.commit();
            return order;
        } catch (Exception e) {
            e.printStackTrace();
            TxUtils.rollback();
        } finally {
            TxUtils.close();
        }
        return null;
    }
}
